package interpreter

import org.eclipse.emf.common.util.URI
import org.eclipse.xtext.resource.XtextResourceSet
import tp4.dsl.PdmStandaloneSetup
import tp4.dsl.pdm.Model
import tp4.dsl.pdm.Asignacion
import tp4.dsl.pdm.Planificacion

class PlanificacionInterpreter {

	def static void main(String[] args) {
		if (args.isEmpty) {
			throw new RuntimeException(
				"Debe invocar este interprete con la ruta completa a un archivo .pdm como argumento!")
		}
		val fileName = args.get(0)
		val model = parsear(fileName)
		new PlanificacionInterpreter().interpret(model)
	}

	def static parsear(String fileName) {
		val injector = new PdmStandaloneSetup().createInjectorAndDoEMFRegistration()
		val resourceSet = injector.getInstance(XtextResourceSet)
		val resource = resourceSet.createResource(URI.createURI(fileName))
		resource.load(#{})
		return resource.contents.get(0) as Model
	}

def interpret(Model model) {
        println("profesores:")
        profesoresConDedicacion(model)
        println("--------------------------------------")
        println("Asignacion de materias por profesor:")
        profesoresConMaterias(model)
    }

    def profesoresConDedicacion(Model m) {
        m.profesoresACargar.forEach[ f |
        println("profesor: "+f.name +", tiene dedicacion: "+f.dedicacion.eClass.name)]
    }
    
    def profesoresConMaterias(Model m){
        m.profesoresACargar.forEach[ f | (m.planificacion.asignaciones).forEach[r|r.profesor.equals(f){
            println(r.profesor.name +" "+r.materia.name)
        } ]]
    
        m.lista.forEach[ f |
        println("profesor: " + f.profesor.name +" "+f.materia.name )]
    }
    
    def lista(Model m){
        (m.planificacion.asignaciones)
    }
   
}
